Key

scroll

Key Blog

  • Key ホームページ>
  • ブログ>
  • [ue5] 有助於記憶體優化的工具、命令及優化方法
  • [UE5] メモリ最適化に役立つツール・便利コマンド一覧と最適化方法

    @kiikey4(Key Zhao)

    [UE5] メモリ最適化に役立つツール・便利コマンド一覧と最適化方法

    投稿日 2024年12月17日

    0

    概要

    この記事の前半では、UEのメモリ最適化に役立つ便利なコマンドとツールを紹介します。後半では、それらのコマンドとツールを活用してUEのメモリ最適化を行う方法を解説します。 参考記事や動画が多数ありますので、そちらも併せてご覧いただくと、より理解が深まるかと思います。

    環境

    • Unreal Engine 5.4

    本編

    メモリ最適化の目的

    • パフォーマンス向上
      • 効率的なメモリ管理により、ゲームのフレームレートや全体のパフォーマンスが向上する
    • メモリ不足クラッシュを解消
    • ロード時間短縮
      • 最適化されたテクスチャやアセットにより、ロード時間が短縮される

    UE 便利なメモリ管理コマンドとツール

    stat memory

    • コマンド stat memory 現在のメモリ使用量ジャンルごとにゲーム画面に表示

    StatMemory_t1z2t8

    Memreport

    • コマンド memreport -full メモリリポート、ダンプファイルに保存
    • コマンド memreport -log メモリリポート、log に表示

    Memreport 参考:

    Qiita: Memreport でメモリリークの原因を調査 Ari's Unreal Engine Notes: Debugging Memory Leaks [UE4]Memreport を活用しよう!

    • Memreportの一部:全体メモリー使用量を表示される
      • ダンプファイルに"Physical Memory"を検索すると出てきます。 image_zwpbqj
    • Memreportの一部:テクスチャをメモリー使用量降順で表示される
      • ダンプファイルに"listtextures"を検索すると出てきます。 image_qfkujl

    Object List

    • コマンド obj list 現在存在しているオブジェクトを表示
    • コマンド obj list name= 現在存在しているオブジェクト名前で検索
    • コマンド obj refs name= 現在存在しているオブジェクト名前で検索、参照されている先を表示

    obj list 参考記事:

    [UE4] Obj コマンドによるオブジェクト解析

    obj list参考画像 image_ad9wgh

    GC(ガベージコレクション)を実行するコマンド

    • コマンド obj gc
      • ガベージ コレクションを一回実行する
    • コマンド gc.ForceCollectGarbageEveryFrame 1
      • 毎フレーム強制的に GC を実行するコマンド
    • コマンド gc.ForceCollectGarbageEveryFrame 0
      • 毎フレーム強制的に GC 実行を停止するコマンド

    GC されることで、アセットが解放されるかどうか、または参照が残っているかどうかを確認できる。

    毎フレーム強制的に GC を実行するコマンドはゲームの動作が重くなるため、調査目的以外での使用は控えた方がよいです。

    GC 参考:

    GC とは: 公式ドキュメント:Unreal でのオブジェクト処理

    【UE5】強制的にガベージコレクションを動作させる

    【UE4】UObject の PendingKill について | 株式会社ヘキサドライブ | HEXADRIVE | ゲーム制作を中心としたコンテンツクリエイト会社

    ツール: Low Level Memory Tracker(LLM)

    • コマンド stat llm Low Level Memory Tracker(LLM)はメモリの使用状況を追跡するツールです。 詳しくは参考をご覧ください。

    LLM参考:

    公式ドキュメント:Low-Level Memory Tracker

    [UE4] LLM (Low Level Memory Tracker)を使用したメモリトラッキング

    ツール: 参照ヴューア(Reference Viewer)

    アセットの参照元または参照先になっているアセットのグラフに表示されるツールです。 UE 内アセットを右クリック->参照ヴューア で使うことができます。 読み込またくないアセットが読み込まれた時に調査に役を立ちます。

    公式ドキュメント:参照ヴューア

    image_doxlqp

    ツール: Size Map

    UE 内アクターを右クリック-> Size Map, 右上 Memory を選択するとそのアセットが参照ている全部のアセットメモリ容量を見えることができる

    Size Map 参考:

    動画: How To Optimise Memory Usage In Your Unreal Engine 5 Game

    image_tflhtf

    ツール:Memory Insight

    どの時点でメモリの割り当てと解放情報を確認できるツールです。 例:Time A -> Time B  メモリ増加量 123.456MB

    Memory Insight 参考:

    Qiita: UE4 Memory Insights を使用したメモリトラッキング

    公式ドキュメント: Memory Insights

    Memory Insight 使うメモリリークを調査実例動画34:38: Maximizing Your Game's Performance in Unreal Engine | Unreal Fest 2022

    image_tjggde

    メモリ調査方法と最適化アプローチ

    メモリ最適化フローを紹介していきます。基本的には下図の流れになります。

    MemOptimizationFlow_ja_wxeg3g

    メモリ不足問題を特定

    メモリ不足問題は、クラッシュログやメモリ不足通知を確認して特定できます。

    • ただしメモリ低下の警告ログが出る場合もあれば、出ないこともあります。 LowMemoryWarning_ja_rvditu

    データ収集

    stat memorymemreport、memory insight、UE 以外のプロファイラーなどを使って メモリ使用状況を調べる

    • 必ず実機やパッケージ版で調べる
      • PIE モードでは事前に読み込まれたキャッシュや背景での動作が影響し、正確な測定が難しくなる
    • 機種によるメモリ使用量が異なる
    全体メモリ使用量を確認

    全体メモリ使用量の確認をする、物理メモリ空き 500MB 以上確保すると安全。

    memreport -full利用して確認。

    • Memreportの一部:全体メモリー使用量を表示される
      • ダンプファイルに"Physical Memory"を検索すると出てきます。 image_zwpbqj
    テクスチャメモリ使用量を確認

    リポートの listtextures nonvt を表示するところで確認可能(サイズが大きい順に表示)

    memreport -full利用して確認。

    • Memreportの一部:テクスチャをメモリー使用量降順で表示される
      • ダンプファイルに"listtextures"を検索すると出てきます。 image_qfkujl

    データの分析

    メモリレポートで使用量が突出しているリソース(テクスチャ、マテリアルなど)を特定 不要なアセットやサイズが過大なアセットを洗い出す

    不要なアセットを読み込まれた調査

    コマンド obj list name= を使用し、該当アセット名で検索し、読み込まれたかどうかを確認可能。 使用例:obj list name=T_SomeTexture

    コマンド obj refs name= を使用し、 該当するアセットがどの元に参照されているかを表示し、読み込まれた原因を特定できる 使用例:obj refs name=T_SomeTexture

    また、参照ヴューア(Reference Viewer)と合わせて参照元、読み込まれた原因を更に追跡し、どうやってハード参照(ハードリファレンス)されているのを調査します。

    ハード参照とソフト参照については:

    ハード参照とソフト参照

    BP の参照連鎖を断つ手法

    改善策の提案

    • 不要なアセットの削除や、読み込まない対応
    • 大きいテクスチャ解像度の削減や圧縮設定の調整
    • その他(データ分析により提案が異なる)
      • 例: モバイルゲームではライティングの設定を調整することでメモリ使用量を軽減することでができます。

    圧縮フォーマット参考:

    テクスチャのフォーマットについて [UE5] 画像の圧縮フォーマット

    テクスチャ最適化:

    動画: Optimizing textures for Mobile in Unreal Engine 5

    UE5 のミップマップの基本的な設定について

    改善策の実施

    問題アセットを修正や読み込まない対応を行う。

    • 不要なアセットの削除
      • ハードリファレンスを削除
    • 使用済み解放すべきアセットを解放する
      • ハードリファレンスをソフトリファレンスに変更し、解放すべきタイミングで nullptr に設定することで、次回の GC 実行時に解放されるようになります。
    • 大きいテクスチャ解像度の削減や圧縮設定の調整
    • その他

    効果検証

    修正後に再度メモリレポートを取得し、改善状況を確認する

    問題アセットが読み込まなくなるかどうか

    GC を実行するコマンド gc.ForceCollectGarbageEveryFrame 1obj gcを利用する。 アセットが参照されなくなる(ソフト参照では Nullptr をセット)時点 GC を強制実行すれば解放される、またobj list name=を利用して、該当アセットが存在しているかどうかで解放されたどうかを確認できます、また存在している(読み込まれている)場合はまだ参照が残っていることです、データ分析の方もう一度行ってください。

    メモリ使用量の変化を比較

    コマンドmemreport -fullmemreport -logで全体メモリ使用量を確認し、対応前後を比較します。

    メモリ最適化の所感

    • メモリリークを防ぐために意識する習慣
      • 解放すべきアセットが nullptr になっているかどうかをチェック
    • ハード参照によってすべてのオブジェクトが読み込まれることに注意
      • ソフト参照の使用を検討する
    • アセットの管理を適切に行う
      • 圧縮可能かどうか、またはテクスチャが過度に大きくないかを確認する
    • 継続的なメモリ監視が必要

    まとめ

    • メモリ最適化の重要性
      • パフォーマンス向上、ロード時間短縮、メモリ不足クラッシュの解消が目標。
    • UE 便利なメモリ管理コマンドとツール
      • stat memory
      • memreport -log, memreport -full
      • obj list,obj list name=, obj refs name=
      • obj gc, gc.ForceCollectGarbageEveryFrame 1
      • LLM
      • Reference Viewer
      • SizeMap
      • Memory Insight
    • メモリ調査方法 問題の特定、データ収集、データ分析、改善策検討と実施、効果検証
    • 改善策の例
      • 不要なアセットの削除や、読み込まない対応
      • 大きいテクスチャ解像度の削減や圧縮設定の調整
      • その他(データ分析により異なる)

    最後に

    メモリー不足でクラッシュする際にこの記事を役に立たれば嬉しいです。 もし誤りがあればがコメントで教えていただければ修正いたします。

    参考資料

    0

    コメント

    この記事にコメントはありません。

    感想をコメントしましょう